import sdk from '../core';
import component, { ComType } from "../core/tool/component";
import { wordCell, wordMap } from "../core/rpg/wordMap";
import { mathType } from "../core/tool/face";
import { analysisIntent, baseScene } from "../core/tool/baseScene";
import { TaskService } from "../service/TaskService";
import { TaskTargetType, TaskStatus } from "../core/rpg/types/task";

/**
 * 任务组件 - 现代化组件，使用依赖注入
 * 职责：
 * 1. 管理任务数据和状态
 * 2. 存储和维护玩家任务数据
 * 3. 提供任务数据访问接口
 * 4. 通过注入的TaskService处理业务逻辑
 */
export default class task_component extends component {
    taskData: any = {};

    constructor() {
        super();
        this.name = 'task_component';
    }

    init() {
        
    }

    /**
     * 获取任务数据
     */
    getTaskData(): any {
        return this.taskData;
    }

    /**
     * 设置任务数据
     */
    setTaskData(data: any): void {
        this.taskData = data;
    }

    /**
     * 更新签到任务进度
     * @param player 玩家对象
     */
    async updateSignTaskProgress(player: any) {
        const result = await TaskService.updateTaskProgress(player, TaskTargetType.签到);
        
        if (result.success && result.completedTasks.length > 0) {
            let card = sdk.tool.card.create();
            card.title('🎉任务完成!');
            
            result.completedTasks.forEach((task: any) => {
                const taskConfig = TaskService.getTaskConfigs().find(t => t.id === task.taskId);
                if (taskConfig) {
                    card.l(`✅${taskConfig.name} 已完成!`);
                    card.l(`🎁奖励已自动发放:`);
                    taskConfig.rewards.forEach((reward: any) => {
                        card.l(`  ${reward.name} x${reward.count}`);
                    });
                }
            });
            
            this.client_text(card.getText());
        }
    }

    /**
     * 获取玩家的世界任务
     * @param player 玩家对象
     * @param mapName 地图名称
     * @returns 世界任务列表
     */
    async getWorldTasks(player: any, mapName: string): Promise<any[]> {
        try {
            const worldTasks = await TaskService.getPlayerWorldTasks(player, mapName);
            return worldTasks;
        } catch (error) {
            console.error('获取世界任务失败:', error);
            return [];
        }
    }

    /**
     * 更新世界任务进度
     * 当世界任务完成时，只提示完成，不自动发放奖励
     * @param player 玩家对象
     * @param targetType 目标类型
     * @param targetId 目标ID
     * @param count 数量
     */
    async updateWorldTaskProgress(player: any, targetType: TaskTargetType, targetId?: string, count: number = 1) {
        const result = await TaskService.updateTaskProgress(player, targetType, targetId, count);
        
        if (result.success && result.completedTasks.length > 0) {
            let card = sdk.tool.card.create();
            card.title('🎉世界任务完成!');
            
            result.completedTasks.forEach((task: any) => {
                // 直接使用任务对象中的信息，因为世界任务是动态生成的
                if (task.taskId.startsWith('world_task_')) {
                    card.l(`✅世界任务已完成!`);
                    card.l(`📋发送【任务】可领取奖励`);
                    
                    // 显示奖励预览，但不发放
                    if (task.rewards && task.rewards.length > 0) {
                        card.l('┄━═🎁任务奖励预览═━┄');
                        task.rewards.forEach((reward: any, rewardIndex: number) => {
                            card.l(`🎁${reward.name} x${reward.count}`);
                        });
                        card.l('💡结算后将发放奖励并传送回主城');
                    }
                }
            });
            
            player.client_text(card.getText());
        }
    }

    /**
     * 清理玩家的世界任务
     * @param player 玩家对象
     * @param mapName 地图名称
     */
    async clearWorldTasks(player: any, mapName: string): Promise<void> {
        try {
            await TaskService.clearPlayerWorldTasks(player, mapName);
        } catch (error) {
            console.error('清理世界任务失败:', error);
        }
    }
} 